﻿// 1589：不要 62.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <math.h>

using  namespace std;

/*
* http://ybt.ssoier.cn:8088/problem_show.php?pid=1589
原题来自：HDU 2089

杭州人称那些傻乎乎粘嗒嗒的人为 62（音：laoer）。

杭州交通管理局经常会扩充一些的士车牌照，新近出来一个好消息，以后上牌照，不再含有不吉利的数字了，这样一来，就可以消除个别的士司机和乘客的心理障碍，更安全地服务大众。

不吉利的数字为所有含有 4
 或 62
 的号码。例如：62315,73418,8891462315,73418,88914
 都属于不吉利号码。但是，61152
 虽然含有 6
 和 2
，但不是 62
 连号，所以不属于不吉利数字之列。

你的任务是，对于每次给出的一个牌照区间号，推断出交管局今后又要实际上给多少辆新的士车上牌照了。

【输入】
输入的都是整数对 n,m
，如果遇到都是 0
 的整数对，则输入结束。

【输出】
对于每个整数对，输出一个不含有不吉利数字的统计个数，该数值占一行位置。

【输入样例】
1 100
0 0
【输出样例】


80

*/


const int N = 10;
int dp[N][N];

void init() {
	for (int i = 0; i < 10; i++) {
		if (i == 4) continue;
		dp[0][i] = 1;
	}
	for (int i = 1; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			if (j == 4) continue;
			for (int k = 0; k < 10; k++) {
				if (j == 6 && k == 2) continue;
				if (k == 4) continue;
				dp[i][j] += dp[i - 1][k];
			}
		}
	}
}

int solve(int t) {
	if (t == 0) return 1;
	vector<int> nums;
	while (t) {
		nums.push_back(t % 10);
		t /= 10;
	}
	int res = 0; int last = -1; int flag = 0;
	for (int i = nums.size() - 1; i >= 0; i--) {
		int x = nums[i];
		for (int j = x - 1; j >= 0; j--) {
			if (last == 6 && j == 2) continue;
			res += dp[i][j];
		}

		if (x == 4 || (last == 6 && x == 2)) {break;}
		if (i == 0)res += 1;
		last = x;
	}

	return res;
}



int main()
{
	init();
	int a, b;
	while (cin >> a >> b) {
		if (a == 0 && b == 0) break;
		cout << solve(b) - solve(a - 1) << endl;
	}

	return 0;
}

 